#ifndef __EFX_ARRAY_H__
#define __EFX_ARRAY_H__

#define EFX_MANTISSA_WIDTH 23
#define EFX_MANTISSA_MASK 8388607
#define EFX_SIGN_MASK 2147483648
#define EFX_EXPONENT_MASK 2139095040
#define EFX_MAX_EXPONENT 255
#define EFX_MATH_TABLE_SIZE 256
#define EFX_MATH_S32_SHIFT (32 - 9)
#define EFX_MATH_S16_SHIFT (16 - 9)

const uint32 EFX_EXP_MANT_MASK = EFX_MANTISSA_MASK + EFX_EXPONENT_MASK;

const double EFX_EXP_M1[195] = {
    0x1.f1e6b68529e33p-151, 0x1.525be4e4e601dp-149, 0x1.cbe0a45f75eb1p-148,
    0x1.3884e838aea68p-146, 0x1.a8c1f14e2af5dp-145, 0x1.20a717e64a9bdp-143,
    0x1.8851d84118908p-142, 0x1.0a9bdfb02d240p-140, 0x1.6a5bea046b42ep-139,
    0x1.ec7f3b269efa8p-138, 0x1.4eafb87eab0f2p-136, 0x1.c6e2d05bbc000p-135,
    0x1.35208867c2683p-133, 0x1.a425b317eeacdp-132, 0x1.1d8508fa8246ap-130,
    0x1.840fbc08fdc8ap-129, 0x1.07b7112bc1ffep-127, 0x1.666d0dad2961dp-126,
    0x1.e726c3f64d0fep-125, 0x1.4b0dc07cabf98p-123, 0x1.c1f2daf3b6a46p-122,
    0x1.31c5957a47de2p-120, 0x1.9f96445648b9fp-119, 0x1.1a6baeadb4fd1p-117,
    0x1.7fd974d372e45p-116, 0x1.04da4d1452919p-114, 0x1.62891f06b3450p-113,
    0x1.e1dd273aa8a4ap-112, 0x1.4775e0840bfddp-110, 0x1.bd109d9d94bdap-109,
    0x1.2e73f53fba844p-107, 0x1.9b138170d6bfep-106, 0x1.175af0cf60ec5p-104,
    0x1.7baee1bffa80bp-103, 0x1.02057d1245cebp-101, 0x1.5eafffb34ba31p-100,
    0x1.dca23bae16424p-99,  0x1.43e7fc88b8056p-97,  0x1.b83bf23a9a9ebp-96,
    0x1.2b2b8dd05b318p-94,  0x1.969d47321e4ccp-93,  0x1.1452b7723aed2p-91,
    0x1.778fe2497184cp-90,  0x1.fe7116182e9ccp-89,  0x1.5ae191a99585ap-87,
    0x1.d775d87da854dp-86,  0x1.4063f8cc8bb98p-84,  0x1.b374b315f87c1p-83,
    0x1.27ec458c65e3cp-81,  0x1.923372c67a074p-80,  0x1.1152eaeb73c08p-78,
    0x1.737c5645114b5p-77,  0x1.f8e6c24b5592ep-76,  0x1.571db733a9d61p-74,
    0x1.d257d547e083fp-73,  0x1.3ce9b9de78f85p-71,  0x1.aebabae3a41b5p-70,
    0x1.24b6031b49bdap-68,  0x1.8dd5e1bb09d7ep-67,  0x1.0e5b73d1ff53dp-65,
    0x1.6f741de1748ecp-64,  0x1.f36bd37f42f3ep-63,  0x1.536452ee2f75cp-61,
    0x1.cd480a1b74820p-60,  0x1.39792499b1a24p-58,  0x1.aa0de4bf35b38p-57,
    0x1.2188ad6ae3303p-55,  0x1.898471fca6055p-54,  0x1.0b6c3afdde064p-52,
    0x1.6b7719a59f0e0p-51,  0x1.ee001eed62aa0p-50,  0x1.4fb547c775da8p-48,
    0x1.c8464f7616468p-47,  0x1.36121e24d3bbap-45,  0x1.a56e0c2ac7f75p-44,
    0x1.1e642baeb84a0p-42,  0x1.853f01d6d53bap-41,  0x1.0885298767e9ap-39,
    0x1.67852a7007e42p-38,  0x1.e8a37a45fc32ep-37,  0x1.4c1078fe9228ap-35,
    0x1.c3527e433fab1p-34,  0x1.32b48bf117da2p-32,  0x1.a0db0d0ddb3ecp-31,
    0x1.1b48655f37267p-29,  0x1.81056ff2c5772p-28,  0x1.05a628c699fa1p-26,
    0x1.639e3175a689dp-25,  0x1.e355bbaee85cbp-24,  0x1.4875ca227ec38p-22,
    0x1.be6c6fdb01612p-21,  0x1.2f6053b981d98p-19,  0x1.9c54c3b43bc8bp-18,
    0x1.18354238f6764p-16,  0x1.7cd79b5647c9bp-15,  0x1.02cf22526545ap-13,
    0x1.5fc21041027adp-12,  0x1.de16b9c24a98fp-11,  0x1.44e51f113d4d6p-9,
    0x1.b993fe00d5376p-8,   0x1.2c155b8213cf4p-6,   0x1.97db0ccceb0afp-5,
    0x1.152aaa3bf81ccp-3,   0x1.78b56362cef38p-2,   0x1.0000000000000p+0,
    0x1.5bf0a8b145769p+1,   0x1.d8e64b8d4ddaep+2,   0x1.415e5bf6fb106p+4,
    0x1.b4c902e273a58p+5,   0x1.28d389970338fp+7,   0x1.936dc5690c08fp+8,
    0x1.122885aaeddaap+10,  0x1.749ea7d470c6ep+11,  0x1.fa7157c470f82p+12,
    0x1.5829dcf950560p+14,  0x1.d3c4488ee4f7fp+15,  0x1.3de1654d37c9ap+17,
    0x1.b00b5916ac955p+18,  0x1.259ac48bf05d7p+20,  0x1.8f0ccafad2a87p+21,
    0x1.0f2ebd0a80020p+23,  0x1.709348c0ea4f9p+24,  0x1.f4f22091940bdp+25,
    0x1.546d8f9ed26e1p+27,  0x1.ceb088b68e804p+28,  0x1.3a6e1fd9eecfdp+30,
    0x1.ab5adb9c43600p+31,  0x1.226af33b1fdc1p+33,  0x1.8ab7fb5475fb7p+34,
    0x1.0c3d3920962c9p+36,  0x1.6c932696a6b5dp+37,  0x1.ef822f7f6731dp+38,
    0x1.50bba3796379ap+40,  0x1.c9aae4631c056p+41,  0x1.370470aec28edp+43,
    0x1.a6b765d8cdf6dp+44,  0x1.1f43fcc4b662cp+46,  0x1.866f34a725782p+47,
    0x1.0953e2f3a1ef7p+49,  0x1.689e221bc8d5bp+50,  0x1.ea215a1d20d76p+51,
    0x1.4d13fbb1a001ap+53,  0x1.c4b334617cc67p+54,  0x1.33a43d282a519p+56,
    0x1.a220d397972ebp+57,  0x1.1c25c88df6862p+59,  0x1.8232558201159p+60,
    0x1.0672a3c9eb871p+62,  0x1.64b41c6d37832p+63,  0x1.e4cf766fe49bep+64,
    0x1.49767bc0483e3p+66,  0x1.bfc951eb8bb76p+67,  0x1.304d6aeca254bp+69,
    0x1.9d97010884251p+70,  0x1.19103e4080b45p+72,  0x1.7e013cd114461p+73,
    0x1.03996528e074cp+75,  0x1.60d4f6fdac731p+76,  0x1.df8c5af17ba3bp+77,
    0x1.45e3076d61699p+79,  0x1.baed16a6e0da7p+80,  0x1.2cffdfebde1a1p+82,
    0x1.9919cabefcb69p+83,  0x1.160345c9953e3p+85,  0x1.79dbc9dc53c66p+86,
    0x1.00c810d464097p+88,  0x1.5d009394c5c27p+89,  0x1.da57de8f107a8p+90,
    0x1.425982cf597cdp+92,  0x1.b61e5ca3a5e31p+93,  0x1.29bb825dfcf87p+95,
    0x1.94a90db0d6fe2p+96,  0x1.12fec759586fdp+98,  0x1.75c1dc469e3afp+99,
    0x1.fbfd219c43b04p+100, 0x1.5936d44e1a146p+102, 0x1.d531d8a7ee79cp+103,
    0x1.3ed9d24a2d51bp+105, 0x1.b15cfe5b6e17bp+106, 0x1.268038c2c0e00p+108,
    0x1.9044a73545d48p+109, 0x1.1002ab6218b38p+111, 0x1.71b3540cbf921p+112,
    0x1.f6799ea9c414ap+113, 0x1.55779b984f3ebp+115, 0x1.d01a210c44aa4p+116,
    0x1.3b63da8e91210p+118, 0x1.aca8d6b0116b8p+119, 0x1.234de9e0c74e9p+121,
    0x1.8bec7503ca477p+122, 0x1.0d0eda9796b90p+124, 0x1.6db0118477245p+125,
    0x1.f1056dc7bf22dp+126, 0x1.51c2cc3433801p+128, 0x1.cb108ffbec164p+129,
};

const double EFX_EXP_M2[128] = {
    0x1.0000000000000p0, 0x1.0202015600446p0, 0x1.04080ab55de39p0,
    0x1.06122436410ddp0, 0x1.08205601127edp0, 0x1.0a32a84e9c1f6p0,
    0x1.0c49236829e8cp0, 0x1.0e63cfa7ab09dp0, 0x1.1082b577d34edp0,
    0x1.12a5dd543ccc5p0, 0x1.14cd4fc989cd6p0, 0x1.16f9157587069p0,
    0x1.192937074e0cdp0, 0x1.1b5dbd3f68122p0, 0x1.1d96b0eff0e79p0,
    0x1.1fd41afcba45ep0, 0x1.2216045b6f5cdp0, 0x1.245c7613b8a9bp0,
    0x1.26a7793f60164p0, 0x1.28f7170a755fdp0, 0x1.2b4b58b372c79p0,
    0x1.2da4478b620c7p0, 0x1.3001ecf601af7p0, 0x1.32645269ea829p0,
    0x1.34cb8170b5835p0, 0x1.373783a722012p0, 0x1.39a862bd3c106p0,
    0x1.3c1e2876834aap0, 0x1.3e98deaa11dccp0, 0x1.41188f42c3e32p0,
    0x1.439d443f5f159p0, 0x1.462707b2bac21p0, 0x1.48b5e3c3e8186p0,
    0x1.4b49e2ae5ac67p0, 0x1.4de30ec211e60p0, 0x1.50817263c13cdp0,
    0x1.5325180cfacf7p0, 0x1.55ce0a4c58c7cp0, 0x1.587c53c5a7af0p0,
    0x1.5b2fff3210fd9p0, 0x1.5de9176045ff5p0, 0x1.60a7a734ab0e8p0,
    0x1.636bb9a983258p0, 0x1.663559cf1bc7cp0, 0x1.690492cbf9433p0,
    0x1.6bd96fdd034a2p0, 0x1.6eb3fc55b1e76p0, 0x1.719443a03acb9p0,
    0x1.747a513dbef6ap0, 0x1.776630c678bc1p0, 0x1.7a57ede9ea23ep0,
    0x1.7d4f946f0ba8dp0, 0x1.804d30347b546p0, 0x1.8350cd30ac390p0,
    0x1.865a7772164c5p0, 0x1.896a3b1f66a0ep0, 0x1.8c802477b0010p0,
    0x1.8f9c3fd29beafp0, 0x1.92be99a09bf00p0, 0x1.95e73e6b1b75ep0,
    0x1.99163ad4b1dccp0, 0x1.9c4b9b995509bp0, 0x1.9f876d8e8c566p0,
    0x1.a2c9bda3a3e78p0, 0x1.a61298e1e069cp0, 0x1.a9620c6cb3374p0,
    0x1.acb82581eee54p0, 0x1.b014f179fc3b8p0, 0x1.b3787dc80f95fp0,
    0x1.b6e2d7fa5eb18p0, 0x1.ba540dba56e56p0, 0x1.bdcc2cccd3c85p0,
    0x1.c14b431256446p0, 0x1.c4d15e873c193p0, 0x1.c85e8d43f7cd0p0,
    0x1.cbf2dd7d490f2p0, 0x1.cf8e5d84758a9p0, 0x1.d3311bc7822b4p0,
    0x1.d6db26d16cd67p0, 0x1.da8c8d4a66969p0, 0x1.de455df80e3c0p0,
    0x1.e205a7bdab73ep0, 0x1.e5cd799c6a54ep0, 0x1.e99ce2b397649p0,
    0x1.ed73f240dc142p0, 0x1.f152b7a07bb76p0, 0x1.f539424d90f5ep0,
    0x1.f927a1e24bb76p0, 0x1.fd1de6182f8c9p0, 0x1.008e0f64294abp1,
    0x1.02912df5ce72ap1, 0x1.049856cd84339p1, 0x1.06a39207f0a09p1,
    0x1.08b2e7d2035cfp1, 0x1.0ac6606916501p1, 0x1.0cde041b0e9aep1,
    0x1.0ef9db467dcf8p1, 0x1.1119ee5ac36b6p1, 0x1.133e45d82e952p1,
    0x1.1566ea50201d7p1, 0x1.1793e4652cc50p1, 0x1.19c53ccb3fc6bp1,
    0x1.1bfafc47bda73p1, 0x1.1e352bb1a74adp1, 0x1.2073d3f1bd518p1,
    0x1.22b6fe02a3b9cp1, 0x1.24feb2f105cb8p1, 0x1.274afbdbba4a6p1,
    0x1.299be1f3e7f1cp1, 0x1.2bf16e7d2a38cp1, 0x1.2e4baacdb6614p1,
    0x1.30aaa04e80d05p1, 0x1.330e587b62b28p1, 0x1.3576dce33feadp1,
    0x1.37e437282d4eep1, 0x1.3a5670ff972edp1, 0x1.3ccd9432682b4p1,
    0x1.3f49aa9d30590p1, 0x1.41cabe304cb34p1, 0x1.4450d8f00edd4p1,
    0x1.46dc04f4e5338p1, 0x1.496c4c6b832dap1, 0x1.4c01b9950a111p1,
    0x1.4e9c56c731f5dp1, 0x1.513c2e6c731d7p1, 0x1.53e14b042f9cap1,
    0x1.568bb722dd593p1, 0x1.593b7d72305bbp1,
};

const sint8 SIN_S8_S8[129] = {
    0,   3,   6,   9,   12,  16,  19,  22,  25,  28,  31,  34,  37,  40,  43,
    46,  49,  51,  54,  57,  60,  63,  65,  68,  71,  73,  76,  78,  81,  83,
    85,  88,  90,  92,  94,  96,  98,  100, 102, 104, 106, 107, 109, 111, 112,
    113, 115, 116, 117, 118, 120, 121, 122, 122, 123, 124, 125, 125, 126, 126,
    126, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 125, 125, 124, 123,
    122, 122, 121, 120, 118, 117, 116, 115, 113, 112, 111, 109, 107, 106, 104,
    102, 100, 98,  96,  94,  92,  90,  88,  85,  83,  81,  78,  76,  73,  71,
    68,  65,  63,  60,  57,  54,  51,  49,  46,  43,  40,  37,  34,  31,  28,
    25,  22,  19,  16,  12,  9,   6,   3,   0};

const sint8 COS_S8_S8[129] = {
    127,  127,  127,  127,  126,  126,  126,  125,  125,  124,  123,  122,
    122,  121,  120,  118,  117,  116,  115,  113,  112,  111,  109,  107,
    106,  104,  102,  100,  98,   96,   94,   92,   90,   88,   85,   83,
    81,   78,   76,   73,   71,   68,   65,   63,   60,   57,   54,   51,
    49,   46,   43,   40,   37,   34,   31,   28,   25,   22,   19,   16,
    12,   9,    6,    3,    0,    -3,   -6,   -9,   -12,  -16,  -19,  -22,
    -25,  -28,  -31,  -34,  -37,  -40,  -43,  -46,  -49,  -51,  -54,  -57,
    -60,  -63,  -65,  -68,  -71,  -73,  -76,  -78,  -81,  -83,  -85,  -88,
    -90,  -92,  -94,  -96,  -98,  -100, -102, -104, -106, -107, -109, -111,
    -112, -113, -115, -116, -117, -118, -120, -121, -122, -122, -123, -124,
    -125, -125, -126, -126, -126, -127, -127, -127, -127};

const sint32 ARCSIN_S32_S32[EFX_MATH_TABLE_SIZE + 1] = {
    0L,          5340367L,    10680816L,   16021428L,   21362284L,
    26703467L,   32045057L,   37387136L,   42729786L,   48073090L,
    53417128L,   58761982L,   64107736L,   69454471L,   74802269L,
    80151213L,   85501386L,   90852870L,   96205749L,   101560106L,
    106916024L,  112273586L,  117632877L,  122993981L,  128356982L,
    133721965L,  139089015L,  144458217L,  149829655L,  155203418L,
    160579589L,  165958257L,  171339507L,  176723427L,  182110105L,
    187499628L,  192892085L,  198287565L,  203686157L,  209087951L,
    214493037L,  219901506L,  225313448L,  230728956L,  236148121L,
    241571037L,  246997797L,  252428494L,  257863224L,  263302081L,
    268745160L,  274192559L,  279644373L,  285100702L,  290561643L,
    296027295L,  301497758L,  306973133L,  312453521L,  317939024L,
    323429745L,  328925788L,  334427257L,  339934258L,  345446896L,
    350965281L,  356489518L,  362019719L,  367555992L,  373098450L,
    378647204L,  384202367L,  389764053L,  395332379L,  400907461L,
    406489416L,  412078363L,  417674423L,  423277716L,  428888366L,
    434506495L,  440132231L,  445765698L,  451407026L,  457056343L,
    462713781L,  468379472L,  474053550L,  479736150L,  485427410L,
    491127468L,  496836465L,  502554543L,  508281846L,  514018521L,
    519764713L,  525520574L,  531286254L,  537061908L,  542847690L,
    548643759L,  554450273L,  560267396L,  566095292L,  571934126L,
    577784068L,  583645289L,  589517964L,  595402268L,  601298380L,
    607206483L,  613126761L,  619059401L,  625004593L,  630962530L,
    636933409L,  642917429L,  648914792L,  654925705L,  660950376L,
    666989019L,  673041850L,  679109088L,  685190957L,  691287685L,
    697399504L,  703526650L,  709669361L,  715827883L,  722002463L,
    728193356L,  734400819L,  740625115L,  746866512L,  753125282L,
    759401704L,  765696062L,  772008644L,  778339746L,  784689669L,
    791058719L,  797447210L,  803855462L,  810283802L,  816732563L,
    823202087L,  829692720L,  836204819L,  842738747L,  849294877L,
    855873588L,  862475270L,  869100320L,  875749145L,  882422162L,
    889119799L,  895842491L,  902590688L,  909364846L,  916165438L,
    922992945L,  929847861L,  936730693L,  943641963L,  950582204L,
    957551966L,  964551810L,  971582317L,  978644082L,  985737715L,
    992863846L,  1000023121L, 1007216208L, 1014443791L, 1021706577L,
    1029005293L, 1036340689L, 1043713538L, 1051124637L, 1058574809L,
    1066064904L, 1073595798L, 1081168399L, 1088783643L, 1096442499L,
    1104145970L, 1111895094L, 1119690945L, 1127534637L, 1135427326L,
    1143370209L, 1151364529L, 1159411577L, 1167512696L, 1175669281L,
    1183882783L, 1192154713L, 1200486646L, 1208880224L, 1217337158L,
    1225859237L, 1234448328L, 1243106385L, 1251835453L, 1260637672L,
    1269515289L, 1278470657L, 1287506251L, 1296624673L, 1305828660L,
    1315121096L, 1324505024L, 1333983656L, 1343560388L, 1353238817L,
    1363022753L, 1372916242L, 1382923586L, 1393049363L, 1403298456L,
    1413676082L, 1424187823L, 1434839664L, 1445638034L, 1456589855L,
    1467702595L, 1478984331L, 1490443823L, 1502090591L, 1513935019L,
    1525988461L, 1538263382L, 1550773504L, 1563534002L, 1576561722L,
    1589875454L, 1603496259L, 1617447870L, 1631757200L, 1646454960L,
    1661576464L, 1677162652L, 1693261427L, 1709929436L, 1727234482L,
    1745258857L, 1764104085L, 1783897870L, 1804804634L, 1827042244L,
    1850910020L, 1876839020L, 1905491032L, 1937980448L, 1976480875L,
    2026605867L, 2147483647L};

const sint16 ARCSIN_S16_S16[EFX_MATH_TABLE_SIZE + 1] = {
    0,     81,    163,   244,   326,   407,   489,   570,   652,   734,   815,
    897,   978,   1060,  1141,  1223,  1305,  1386,  1468,  1550,  1631,  1713,
    1795,  1877,  1959,  2040,  2122,  2204,  2286,  2368,  2450,  2532,  2614,
    2697,  2779,  2861,  2943,  3026,  3108,  3190,  3273,  3355,  3438,  3521,
    3603,  3686,  3769,  3852,  3935,  4018,  4101,  4184,  4267,  4350,  4434,
    4517,  4600,  4684,  4768,  4851,  4935,  5019,  5103,  5187,  5271,  5355,
    5440,  5524,  5608,  5693,  5778,  5862,  5947,  6032,  6117,  6202,  6288,
    6373,  6459,  6544,  6630,  6716,  6802,  6888,  6974,  7060,  7147,  7233,
    7320,  7407,  7494,  7581,  7668,  7756,  7843,  7931,  8019,  8107,  8195,
    8283,  8372,  8460,  8549,  8638,  8727,  8816,  8906,  8995,  9085,  9175,
    9265,  9355,  9446,  9537,  9628,  9719,  9810,  9902,  9993,  10085, 10177,
    10270, 10362, 10455, 10548, 10641, 10735, 10829, 10923, 11017, 11111, 11206,
    11301, 11396, 11492, 11587, 11683, 11780, 11876, 11973, 12070, 12168, 12266,
    12364, 12462, 12561, 12660, 12759, 12859, 12959, 13059, 13160, 13261, 13363,
    13464, 13567, 13669, 13772, 13876, 13979, 14084, 14188, 14293, 14399, 14505,
    14611, 14718, 14825, 14933, 15041, 15150, 15259, 15369, 15479, 15590, 15701,
    15813, 15926, 16039, 16152, 16267, 16382, 16497, 16613, 16730, 16848, 16966,
    17085, 17205, 17325, 17446, 17568, 17691, 17815, 17939, 18064, 18191, 18318,
    18446, 18575, 18705, 18836, 18968, 19101, 19236, 19371, 19508, 19645, 19785,
    19925, 20067, 20210, 20355, 20501, 20648, 20798, 20949, 21101, 21256, 21412,
    21571, 21731, 21894, 22058, 22225, 22395, 22567, 22742, 22920, 23100, 23284,
    23472, 23663, 23857, 24056, 24259, 24467, 24680, 24898, 25123, 25353, 25591,
    25837, 26091, 26355, 26630, 26918, 27220, 27539, 27878, 28242, 28638, 29075,
    29571, 30158, 30923, 32767};

const sint8 ARCSIN_S8_S8[129] = {
    0,  1,   1,   2,   3,   3,   4,   4,   5,   6,  6,  7,  8,  8,  9,  10, 10,
    11, 12,  12,  13,  13,  14,  15,  15,  16,  17, 17, 18, 19, 19, 20, 21, 21,
    22, 23,  23,  24,  25,  25,  26,  27,  27,  28, 29, 29, 30, 31, 31, 32, 33,
    34, 34,  35,  36,  36,  37,  38,  38,  39,  40, 41, 41, 42, 43, 44, 44, 45,
    46, 47,  47,  48,  49,  50,  50,  51,  52,  53, 54, 54, 55, 56, 57, 58, 59,
    60, 60,  61,  62,  63,  64,  65,  66,  67,  68, 69, 70, 71, 72, 73, 74, 75,
    76, 77,  78,  79,  80,  81,  83,  84,  85,  86, 88, 89, 90, 92, 93, 95, 97,
    99, 100, 102, 105, 107, 110, 113, 117, 127, 127};

const sint32 ARCCOS_S32_S32[EFX_MATH_TABLE_SIZE + 1] = {
    2147483647L, 2142143280L, 2136802831L, 2131462220L, 2126121363L,
    2120780181L, 2115438591L, 2110096512L, 2104753861L, 2099410558L,
    2094066520L, 2088721665L, 2083375911L, 2078029177L, 2072681378L,
    2067332434L, 2061982261L, 2056630777L, 2051277898L, 2045923542L,
    2040567624L, 2035210061L, 2029850770L, 2024489666L, 2019126665L,
    2013761682L, 2008394633L, 2003025431L, 1997653992L, 1992280230L,
    1986904058L, 1981525391L, 1976144141L, 1970760220L, 1965373543L,
    1959984020L, 1954591562L, 1949196082L, 1943797490L, 1938395696L,
    1932990610L, 1927582142L, 1922170199L, 1916754692L, 1911335526L,
    1905912610L, 1900485850L, 1895055153L, 1889620424L, 1884181567L,
    1878738488L, 1873291089L, 1867839274L, 1862382945L, 1856922004L,
    1851456352L, 1845985889L, 1840510514L, 1835030126L, 1829544623L,
    1824053902L, 1818557860L, 1813056391L, 1807549390L, 1802036751L,
    1796518367L, 1790994129L, 1785463928L, 1779927655L, 1774385198L,
    1768836444L, 1763281281L, 1757719594L, 1752151268L, 1746576187L,
    1740994232L, 1735405284L, 1729809225L, 1724205932L, 1718595282L,
    1712977152L, 1707351417L, 1701717949L, 1696076621L, 1690427304L,
    1684769866L, 1679104175L, 1673430098L, 1667747498L, 1662056238L,
    1656356180L, 1650647182L, 1644929104L, 1639201801L, 1633465127L,
    1627718934L, 1621963073L, 1616197393L, 1610421739L, 1604635957L,
    1598839889L, 1593033374L, 1587216251L, 1581388356L, 1575549522L,
    1569699580L, 1563838358L, 1557965684L, 1552081380L, 1546185267L,
    1540277164L, 1534356887L, 1528424247L, 1522479055L, 1516521118L,
    1510550239L, 1504566219L, 1498568855L, 1492557943L, 1486533271L,
    1480494628L, 1474441798L, 1468374560L, 1462292690L, 1456195962L,
    1450084143L, 1443956998L, 1437814287L, 1431655765L, 1425481184L,
    1419290292L, 1413082828L, 1406858532L, 1400617136L, 1394358365L,
    1388081943L, 1381787586L, 1375475003L, 1369143901L, 1362793979L,
    1356424929L, 1350036437L, 1343628185L, 1337199845L, 1330751084L,
    1324281561L, 1317790928L, 1311278829L, 1304744900L, 1298188770L,
    1291610059L, 1285008378L, 1278383328L, 1271734502L, 1265061485L,
    1258363849L, 1251641156L, 1244892960L, 1238118801L, 1231318210L,
    1224490703L, 1217635787L, 1210752954L, 1203841684L, 1196901443L,
    1189931682L, 1182931837L, 1175901330L, 1168839566L, 1161745933L,
    1154619802L, 1147460526L, 1140267439L, 1133039856L, 1125777070L,
    1118478354L, 1111142958L, 1103770110L, 1096359010L, 1088908838L,
    1081418744L, 1073887849L, 1066315248L, 1058700004L, 1051041148L,
    1043337677L, 1035588554L, 1027792703L, 1019949010L, 1012056322L,
    1004113439L, 996119119L,  988072070L,  979970951L,  971814366L,
    963600865L,  955328934L,  946997001L,  938603424L,  930146490L,
    921624411L,  913035320L,  904377262L,  895648194L,  886845975L,
    877968359L,  869012991L,  859977396L,  850858975L,  841654988L,
    832362551L,  822978624L,  813499992L,  803923259L,  794244831L,
    784460895L,  774567405L,  764560062L,  754434285L,  744185192L,
    733807565L,  723295824L,  712643984L,  701845614L,  690893793L,
    679781053L,  668499316L,  657039825L,  645393057L,  633548629L,
    621495186L,  609220266L,  596710144L,  583949646L,  570921925L,
    557608193L,  543987389L,  530035777L,  515726448L,  501028688L,
    485907183L,  470320995L,  454222221L,  437554211L,  420249166L,
    402224791L,  383379562L,  363585778L,  342679014L,  320441404L,
    296573627L,  270644627L,  241992616L,  209503200L,  171002772L,
    120877780L,  0L};

const sint32 ARCCOS_S16_S16[EFX_MATH_TABLE_SIZE + 1] = {
    32767, 32686, 32605, 32523, 32442, 32360, 32279, 32197, 32116, 32034, 31952,
    31871, 31789, 31708, 31626, 31545, 31463, 31381, 31300, 31218, 31136, 31054,
    30973, 30891, 30809, 30727, 30645, 30563, 30481, 30399, 30317, 30235, 30153,
    30071, 29989, 29907, 29824, 29742, 29660, 29577, 29495, 29412, 29330, 29247,
    29164, 29081, 28999, 28916, 28833, 28750, 28667, 28584, 28501, 28417, 28334,
    28251, 28167, 28084, 28000, 27916, 27832, 27749, 27665, 27581, 27496, 27412,
    27328, 27244, 27159, 27075, 26990, 26905, 26820, 26735, 26650, 26565, 26480,
    26394, 26309, 26223, 26138, 26052, 25966, 25880, 25793, 25707, 25621, 25534,
    25447, 25361, 25274, 25186, 25099, 25012, 24924, 24837, 24749, 24661, 24573,
    24484, 24396, 24307, 24219, 24130, 24041, 23951, 23862, 23772, 23683, 23593,
    23502, 23412, 23322, 23231, 23140, 23049, 22958, 22866, 22774, 22682, 22590,
    22498, 22405, 22312, 22219, 22126, 22033, 21939, 21845, 21751, 21656, 21562,
    21467, 21371, 21276, 21180, 21084, 20988, 20891, 20794, 20697, 20600, 20502,
    20404, 20305, 20207, 20108, 20008, 19909, 19808, 19708, 19607, 19506, 19405,
    19303, 19201, 19098, 18995, 18892, 18788, 18684, 18579, 18474, 18369, 18263,
    18157, 18050, 17943, 17835, 17727, 17618, 17509, 17399, 17289, 17178, 17066,
    16954, 16842, 16729, 16615, 16501, 16386, 16270, 16154, 16037, 15920, 15802,
    15683, 15563, 15443, 15321, 15199, 15077, 14953, 14828, 14703, 14577, 14450,
    14322, 14193, 14063, 13932, 13799, 13666, 13532, 13397, 13260, 13122, 12983,
    12842, 12701, 12557, 12413, 12267, 12119, 11970, 11819, 11666, 11512, 11355,
    11197, 11036, 10874, 10709, 10542, 10372, 10200, 10025, 9848,  9667,  9483,
    9296,  9105,  8910,  8711,  8508,  8300,  8088,  7869,  7645,  7414,  7176,
    6931,  6676,  6412,  6137,  5850,  5548,  5229,  4889,  4525,  4130,  3692,
    3197,  2609,  1844,  0};

const uint8 ARCCOS_S8_U8[EFX_MATH_TABLE_SIZE] = {
    255, 255, 245, 241, 237, 235, 232, 230, 228, 226, 224, 223, 221, 219, 218,
    217, 215, 214, 213, 211, 210, 209, 208, 207, 205, 204, 203, 202, 201, 200,
    199, 198, 197, 196, 195, 194, 193, 192, 191, 191, 190, 189, 188, 187, 186,
    185, 184, 184, 183, 182, 181, 180, 180, 179, 178, 177, 176, 176, 175, 174,
    173, 173, 172, 171, 170, 170, 169, 168, 167, 167, 166, 165, 165, 164, 163,
    162, 162, 161, 160, 160, 159, 158, 158, 157, 156, 156, 155, 154, 154, 153,
    152, 151, 151, 150, 149, 149, 148, 148, 147, 146, 146, 145, 144, 144, 143,
    142, 142, 141, 140, 140, 139, 138, 138, 137, 136, 136, 135, 135, 134, 133,
    133, 132, 131, 131, 130, 129, 129, 128, 127, 127, 126, 126, 125, 124, 124,
    123, 122, 122, 121, 120, 120, 119, 119, 118, 117, 117, 116, 115, 115, 114,
    113, 113, 112, 111, 111, 110, 109, 109, 108, 107, 107, 106, 106, 105, 104,
    104, 103, 102, 101, 101, 100, 99,  99,  98,  97,  97,  96,  95,  95,  94,
    93,  93,  92,  91,  90,  90,  89,  88,  88,  87,  86,  85,  85,  84,  83,
    82,  82,  81,  80,  79,  79,  78,  77,  76,  75,  75,  74,  73,  72,  71,
    71,  70,  69,  68,  67,  66,  65,  64,  64,  63,  62,  61,  60,  59,  58,
    57,  56,  55,  54,  53,  52,  51,  50,  48,  47,  46,  45,  44,  42,  41,
    40,  38,  37,  36,  34,  32,  31,  29,  27,  25,  23,  20,  18,  14,  10,
    0};

const uint32 sqrt_initial_lut_u32[32] = {
    1073741824, 1012333500, 960383883, 915690104, 876706528, 842312387,
    811672525,  784150157,  759250125, 736580814, 715827883, 696735698,
    679093957,  662727842,  647490682, 633258380, 619925131, 607400100,
    595604800,  584471019,  573939147, 563956835, 554477894, 545461392,
    536870912,  528673928,  520841289, 513346779, 506166750, 499279807,
    492666537,  486309283};
const uint16 sqrt_initial_lut_u16[16] = {
    16384, 14654, 13377, 12385, 11585, 10923, 10362, 9880,
    9459,  9088,  8758,  8461,  8192,  7947,  7723,  7517};

const uint8 sqrt_initial_lut_u8[8] = {65, 53, 42, 40, 34, 30, 26, 20};

/**
  @par
  Table values are in S16 (1.15 fixed-point format) and generation is done in
  three steps.  First,  generate sin values in floating point:
  <pre>
  tableSize = 256;
  for (n = 0; n < (tableSize + 1); n++)
  {
        sinTable[n] = sin(PI*n/tableSize);
  } </pre>
  where PI value is  3.14159265358979
 @par
  Second, convert floating-point to S16 (Fixed point):
        (sinTable[i] * pow(2, 15))
 @par
  Finally, round to the nearest integer value:
        sinTable[i] += (sinTable[i] > 0 ? 0.5 :-0.5);
 */
const sint16 SIN_S16_S16[EFX_MATH_TABLE_SIZE + 1] = {
    0,     402,   804,   1206,  1608,  2009,  2410,  2811,  3212,  3612,  4011,
    4410,  4808,  5205,  5602,  5998,  6393,  6786,  7179,  7571,  7962,  8351,
    8739,  9126,  9512,  9896,  10278, 10659, 11039, 11417, 11793, 12167, 12539,
    12910, 13279, 13645, 14010, 14372, 14732, 15090, 15446, 15800, 16151, 16499,
    16846, 17189, 17530, 17869, 18204, 18537, 18868, 19195, 19519, 19841, 20159,
    20475, 20787, 21096, 21403, 21705, 22005, 22301, 22594, 22884, 23170, 23452,
    23731, 24007, 24279, 24547, 24811, 25072, 25329, 25582, 25832, 26077, 26319,
    26556, 26790, 27019, 27245, 27466, 27683, 27896, 28105, 28310, 28510, 28706,
    28898, 29085, 29268, 29447, 29621, 29791, 29956, 30117, 30273, 30424, 30571,
    30714, 30852, 30985, 31113, 31237, 31356, 31470, 31580, 31685, 31785, 31880,
    31971, 32057, 32137, 32213, 32285, 32351, 32412, 32469, 32521, 32567, 32609,
    32646, 32678, 32705, 32728, 32745, 32757, 32765, 32767, 32765, 32757, 32745,
    32728, 32705, 32678, 32646, 32609, 32567, 32521, 32469, 32412, 32351, 32285,
    32213, 32137, 32057, 31971, 31880, 31785, 31685, 31580, 31470, 31356, 31237,
    31113, 30985, 30852, 30714, 30571, 30424, 30273, 30117, 29956, 29791, 29621,
    29447, 29268, 29085, 28898, 28706, 28510, 28310, 28105, 27896, 27683, 27466,
    27245, 27019, 26790, 26556, 26319, 26077, 25832, 25582, 25329, 25072, 24811,
    24547, 24279, 24007, 23731, 23452, 23170, 22884, 22594, 22301, 22005, 21705,
    21403, 21096, 20787, 20475, 20159, 19841, 19519, 19195, 18868, 18537, 18204,
    17869, 17530, 17189, 16846, 16499, 16151, 15800, 15446, 15090, 14732, 14372,
    14010, 13645, 13279, 12910, 12539, 12167, 11793, 11417, 11039, 10659, 10278,
    9896,  9512,  9126,  8739,  8351,  7962,  7571,  7179,  6786,  6393,  5998,
    5602,  5205,  4808,  4410,  4011,  3612,  3212,  2811,  2410,  2009,  1608,
    1206,  804,   402,   0};

/**
  @par
  Table values are in S16 (1.15 fixed-point format) and generation is done in
  three steps.  First,  generate sin values in floating point:
  <pre>
  tableSize = 256;
  for (n = 0; n < (tableSize + 1); n++)
  {
        sinTable[n] = cos(PI*n/tableSize);
  } </pre>
  where PI value is  3.14159265358979
 @par
  Second, convert floating-point to S16 (Fixed point):
        (sinTable[i] * pow(2, 15))
 @par
  Finally, round to the nearest integer value:
        sinTable[i] += (sinTable[i] > 0 ? 0.5 :-0.5);
 */

const sint16 COS_S16_S16[EFX_MATH_TABLE_SIZE + 1] = {
    32767,  32765,  32757,  32745,  32728,  32705,  32678,  32646,  32609,
    32567,  32521,  32469,  32412,  32351,  32285,  32213,  32137,  32057,
    31971,  31880,  31785,  31685,  31580,  31470,  31356,  31237,  31113,
    30985,  30852,  30714,  30571,  30424,  30273,  30117,  29956,  29791,
    29621,  29447,  29268,  29085,  28898,  28706,  28510,  28310,  28105,
    27896,  27683,  27466,  27245,  27019,  26790,  26556,  26319,  26077,
    25832,  25582,  25329,  25072,  24811,  24547,  24279,  24007,  23731,
    23452,  23170,  22884,  22594,  22301,  22005,  21705,  21403,  21096,
    20787,  20475,  20159,  19841,  19519,  19195,  18868,  18537,  18204,
    17869,  17530,  17189,  16846,  16499,  16151,  15800,  15446,  15090,
    14732,  14372,  14010,  13645,  13279,  12910,  12539,  12167,  11793,
    11417,  11039,  10659,  10278,  9896,   9512,   9126,   8739,   8351,
    7962,   7571,   7179,   6786,   6393,   5998,   5602,   5205,   4808,
    4410,   4011,   3612,   3212,   2811,   2410,   2009,   1608,   1206,
    804,    402,    0,      -402,   -804,   -1206,  -1608,  -2009,  -2410,
    -2811,  -3212,  -3612,  -4011,  -4410,  -4808,  -5205,  -5602,  -5998,
    -6393,  -6786,  -7179,  -7571,  -7962,  -8351,  -8739,  -9126,  -9512,
    -9896,  -10278, -10659, -11039, -11417, -11793, -12167, -12539, -12910,
    -13279, -13645, -14010, -14372, -14732, -15090, -15446, -15800, -16151,
    -16499, -16846, -17189, -17530, -17869, -18204, -18537, -18868, -19195,
    -19519, -19841, -20159, -20475, -20787, -21096, -21403, -21705, -22005,
    -22301, -22594, -22884, -23170, -23452, -23731, -24007, -24279, -24547,
    -24811, -25072, -25329, -25582, -25832, -26077, -26319, -26556, -26790,
    -27019, -27245, -27466, -27683, -27896, -28105, -28310, -28510, -28706,
    -28898, -29085, -29268, -29447, -29621, -29791, -29956, -30117, -30273,
    -30424, -30571, -30714, -30852, -30985, -31113, -31237, -31356, -31470,
    -31580, -31685, -31785, -31880, -31971, -32057, -32137, -32213, -32285,
    -32351, -32412, -32469, -32521, -32567, -32609, -32646, -32678, -32705,
    -32728, -32745, -32757, -32765, -32767};
/**
  @par
  Table values are in S32 (1.31 fixed-point format) and generation is done in
  three steps.  First, generate sin values in floating point:
  <pre>
  tableSize = 256;
  for (n = 0; n < (tableSize + 1); n++)
  {
        sinTable[n] = sin(PI*n/tableSize);
  } </pre>
  where PI value is 3.14159265358979
 @par
  Second, convert floating-point to S32 (Fixed point):
        (sinTable[i] * pow(2, 31))
 @par
  Finally, round to the nearest integer value:
        sinTable[i] += (sinTable[i] > 0 ? 0.5 : -0.5);
 */
const sint32 SIN_S32_S32[EFX_MATH_TABLE_SIZE + 1] = {
    0L,          26352928L,   52701887L,   79042909L,   105372028L,
    131685278L,  157978697L,  184248325L,  210490206L,  236700388L,
    262874923L,  289009871L,  315101294L,  341145265L,  367137860L,
    393075166L,  418953276L,  444768293L,  470516330L,  496193509L,
    521795963L,  547319836L,  572761285L,  598116478L,  623381597L,
    648552837L,  673626408L,  698598533L,  723465451L,  748223418L,
    772868706L,  797397602L,  821806413L,  846091463L,  870249095L,
    894275670L,  918167571L,  941921200L,  965532978L,  988999351L,
    1012316784L, 1035481765L, 1058490807L, 1081340445L, 1104027236L,
    1126547765L, 1148898640L, 1171076495L, 1193077990L, 1214899812L,
    1236538675L, 1257991319L, 1279254515L, 1300325059L, 1321199780L,
    1341875532L, 1362349204L, 1382617710L, 1402677999L, 1422527050L,
    1442161874L, 1461579513L, 1480777044L, 1499751575L, 1518500249L,
    1537020243L, 1555308767L, 1573363067L, 1591180425L, 1608758157L,
    1626093615L, 1643184190L, 1660027308L, 1676620431L, 1692961061L,
    1709046738L, 1724875039L, 1740443580L, 1755750016L, 1770792043L,
    1785567395L, 1800073848L, 1814309215L, 1828271355L, 1841958164L,
    1855367580L, 1868497585L, 1881346201L, 1893911493L, 1906191569L,
    1918184580L, 1929888719L, 1941302224L, 1952423376L, 1963250500L,
    1973781966L, 1984016188L, 1993951624L, 2003586778L, 2012920200L,
    2021950483L, 2030676268L, 2039096240L, 2047209132L, 2055013722L,
    2062508835L, 2069693341L, 2076566159L, 2083126253L, 2089372637L,
    2095304369L, 2100920555L, 2106220351L, 2111202958L, 2115867625L,
    2120213650L, 2124240379L, 2127947205L, 2131333571L, 2134398965L,
    2137142926L, 2139565042L, 2141664947L, 2143442325L, 2144896909L,
    2146028479L, 2146836865L, 2147321945L, 2147483647L, 2147321945L,
    2146836865L, 2146028479L, 2144896909L, 2143442325L, 2141664947L,
    2139565042L, 2137142926L, 2134398965L, 2131333571L, 2127947205L,
    2124240379L, 2120213650L, 2115867625L, 2111202958L, 2106220351L,
    2100920555L, 2095304369L, 2089372637L, 2083126253L, 2076566159L,
    2069693341L, 2062508835L, 2055013722L, 2047209132L, 2039096240L,
    2030676268L, 2021950483L, 2012920200L, 2003586778L, 1993951624L,
    1984016188L, 1973781966L, 1963250500L, 1952423376L, 1941302224L,
    1929888719L, 1918184580L, 1906191569L, 1893911493L, 1881346201L,
    1868497585L, 1855367580L, 1841958164L, 1828271355L, 1814309215L,
    1800073848L, 1785567395L, 1770792043L, 1755750016L, 1740443580L,
    1724875039L, 1709046738L, 1692961061L, 1676620431L, 1660027308L,
    1643184190L, 1626093615L, 1608758157L, 1591180425L, 1573363067L,
    1555308767L, 1537020243L, 1518500249L, 1499751575L, 1480777044L,
    1461579513L, 1442161874L, 1422527050L, 1402677999L, 1382617710L,
    1362349204L, 1341875532L, 1321199780L, 1300325059L, 1279254515L,
    1257991319L, 1236538675L, 1214899812L, 1193077990L, 1171076495L,
    1148898640L, 1126547765L, 1104027236L, 1081340445L, 1058490807L,
    1035481765L, 1012316784L, 988999351L,  965532978L,  941921200L,
    918167571L,  894275670L,  870249095L,  846091463L,  821806413L,
    797397602L,  772868706L,  748223418L,  723465451L,  698598533L,
    673626408L,  648552837L,  623381597L,  598116478L,  572761285L,
    547319836L,  521795963L,  496193509L,  470516330L,  444768293L,
    418953276L,  393075166L,  367137860L,  341145265L,  315101294L,
    289009871L,  262874923L,  236700388L,  210490206L,  184248325L,
    157978697L,  131685278L,  105372028L,  79042909L,   52701887L,
    26352928L,   0L};

/**
  @par
  Table values are in S32 (1.31 fixed-point format) and generation is done in
  three steps.  First,  generate sin values in floating point:
  <pre>
  tableSize = 256;
  for (n = 0; n < (tableSize + 1); n++)
  {
        sinTable[n] = cos(PI*n/tableSize);
  } </pre>
  where PI value is  3.14159265358979
 @par
  Second, convert floating-point to S32 (Fixed point):
        (sinTable[i] * pow(2, 31))
 @par
  Finally, round to the nearest integer value:
        sinTable[i] += (sinTable[i] > 0 ? 0.5 :-0.5);
 */

const sint32 COS_S32_S32[EFX_MATH_TABLE_SIZE + 1] = {
    2147483647L,  2147321945L,  2146836865L,  2146028479L,  2144896909L,
    2143442325L,  2141664947L,  2139565042L,  2137142926L,  2134398965L,
    2131333571L,  2127947205L,  2124240379L,  2120213650L,  2115867625L,
    2111202958L,  2106220351L,  2100920555L,  2095304369L,  2089372637L,
    2083126253L,  2076566159L,  2069693341L,  2062508835L,  2055013722L,
    2047209132L,  2039096240L,  2030676268L,  2021950483L,  2012920200L,
    2003586778L,  1993951624L,  1984016188L,  1973781966L,  1963250500L,
    1952423376L,  1941302224L,  1929888719L,  1918184580L,  1906191569L,
    1893911493L,  1881346201L,  1868497585L,  1855367580L,  1841958164L,
    1828271355L,  1814309215L,  1800073848L,  1785567395L,  1770792043L,
    1755750016L,  1740443580L,  1724875039L,  1709046738L,  1692961061L,
    1676620431L,  1660027308L,  1643184190L,  1626093615L,  1608758157L,
    1591180425L,  1573363067L,  1555308767L,  1537020243L,  1518500249L,
    1499751575L,  1480777044L,  1461579513L,  1442161874L,  1422527050L,
    1402677999L,  1382617710L,  1362349204L,  1341875532L,  1321199780L,
    1300325059L,  1279254515L,  1257991319L,  1236538675L,  1214899812L,
    1193077990L,  1171076495L,  1148898640L,  1126547765L,  1104027236L,
    1081340445L,  1058490807L,  1035481765L,  1012316784L,  988999351L,
    965532978L,   941921200L,   918167571L,   894275670L,   870249095L,
    846091463L,   821806413L,   797397602L,   772868706L,   748223418L,
    723465451L,   698598533L,   673626408L,   648552837L,   623381597L,
    598116478L,   572761285L,   547319836L,   521795963L,   496193509L,
    470516330L,   444768293L,   418953276L,   393075166L,   367137860L,
    341145265L,   315101294L,   289009871L,   262874923L,   236700388L,
    210490206L,   184248325L,   157978697L,   131685278L,   105372028L,
    79042909L,    52701887L,    26352928L,    0L,           -26352928L,
    -52701887L,   -79042909L,   -105372028L,  -131685278L,  -157978697L,
    -184248325L,  -210490206L,  -236700388L,  -262874923L,  -289009871L,
    -315101294L,  -341145265L,  -367137860L,  -393075166L,  -418953276L,
    -444768293L,  -470516330L,  -496193509L,  -521795963L,  -547319836L,
    -572761285L,  -598116478L,  -623381597L,  -648552837L,  -673626408L,
    -698598533L,  -723465451L,  -748223418L,  -772868706L,  -797397602L,
    -821806413L,  -846091463L,  -870249095L,  -894275670L,  -918167571L,
    -941921200L,  -965532978L,  -988999351L,  -1012316784L, -1035481765L,
    -1058490807L, -1081340445L, -1104027236L, -1126547765L, -1148898640L,
    -1171076495L, -1193077990L, -1214899812L, -1236538675L, -1257991319L,
    -1279254515L, -1300325059L, -1321199780L, -1341875532L, -1362349204L,
    -1382617710L, -1402677999L, -1422527050L, -1442161874L, -1461579513L,
    -1480777044L, -1499751575L, -1518500249L, -1537020243L, -1555308767L,
    -1573363067L, -1591180425L, -1608758157L, -1626093615L, -1643184190L,
    -1660027308L, -1676620431L, -1692961061L, -1709046738L, -1724875039L,
    -1740443580L, -1755750016L, -1770792043L, -1785567395L, -1800073848L,
    -1814309215L, -1828271355L, -1841958164L, -1855367580L, -1868497585L,
    -1881346201L, -1893911493L, -1906191569L, -1918184580L, -1929888719L,
    -1941302224L, -1952423376L, -1963250500L, -1973781966L, -1984016188L,
    -1993951624L, -2003586778L, -2012920200L, -2021950483L, -2030676268L,
    -2039096240L, -2047209132L, -2055013722L, -2062508835L, -2069693341L,
    -2076566159L, -2083126253L, -2089372637L, -2095304369L, -2100920555L,
    -2106220351L, -2111202958L, -2115867625L, -2120213650L, -2124240379L,
    -2127947205L, -2131333571L, -2134398965L, -2137142926L, -2139565042L,
    -2141664947L, -2143442325L, -2144896909L, -2146028479L, -2146836865L,
    -2147321945L, -2147483647L};

#endif